home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / Set.h < prev    next >
C/C++ Source or Header  |  1990-12-10  |  2KB  |  77 lines

  1. #ifndef Set_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define Set_First
  6.  
  7. #include "ObjArray.h"
  8.  
  9. //---- set ------------------------------------------
  10.  
  11. typedef class Set *SetPtr;
  12.  
  13. class Set: public Collection {
  14. friend class SetIter;
  15.     int initSize;                           // initial size of the set
  16.  
  17. protected:
  18.     ObjArray *cont;
  19.  
  20.     bool HighWaterMark ()
  21.     { return (bool) (cont == NULL || size >= ((3 * cont->Size() /4))); }
  22.     bool LowWaterMark ()
  23.     { return (bool) (cont && size < (1 * cont->Size() /4) && size > initSize); }
  24.     void FixCollisions(int at);
  25.     void RemoveDeleted();
  26.  
  27.     virtual int FindElement(ObjPtr); 
  28.     virtual void Expand(int); 
  29.     virtual u_long HashObject(Object *);
  30.     virtual bool   ObjectsEqual(Object *op1, Object *op2);
  31. public:
  32.     MetaDef(Set);   
  33.     Set(int s= cCollectionInitCap);
  34.     ~Set();
  35.     void Init(int s);
  36.     void InitNew();
  37.     void Empty(int initSize = 0);
  38.     ObjPtr Add(ObjPtr);
  39.     void Filter(ObjPtr);  // if an equal object is already in the set
  40.               // it will be deleted with a call to delete ObjPtr
  41.     ObjPtr Remove(ObjPtr);
  42.     ObjPtr RemovePtr(ObjPtr);
  43.     ObjPtr Find(ObjPtr);
  44.     ObjPtr FindPtr(ObjPtr);    
  45.     bool Contains (ObjPtr); 
  46.     bool ContainsPtr (ObjPtr); 
  47.  
  48.     //---- enumerating
  49.     virtual Iterator *MakeIterator(); 
  50.  
  51.     //---- set operations
  52.     SetPtr Union (SetPtr);
  53.     SetPtr Intersection (SetPtr);
  54.     SetPtr Difference (SetPtr);
  55.     SetPtr operator&(SetPtr s)
  56.     { return Intersection(s); }      // intersection 
  57.     SetPtr operator|(SetPtr s) 
  58.     { return Union(s); }             // union 
  59.     SetPtr operator-(SetPtr s)
  60.     { return Difference(s); }        // difference 
  61. };
  62.  
  63. class SetIter : public Iterator {
  64.     int ce;
  65.     Set *cs;
  66. public:
  67.     SetIter(Collection *s);
  68.     ~SetIter();
  69.     ObjPtr operator()();
  70.     Collection *Coll();
  71.     void Reset(Collection *s= 0);
  72. };
  73.  
  74. int SetNextPrime(int); // find next prime number
  75.  
  76. #endif Set_First
  77.